/* eslint-disable @typescript-eslint/no-explicit-any */
interface GetIceCoverResponse {
	ice_cover: IceCover;
}
export type { GetIceCoverResponse };

interface IceCover {
	date: string;
	lat: number[][];
	lon: number[][];
	speed: number[][];
}
export type { IceCover };

interface HttpValidationError {
	detail?: ValidationError[];
}
export type { HttpValidationError };

interface ValidationError {
	loc: (string | number)[];
	msg: string;
	type: string;
}
export type { ValidationError };

type Date = string;
export type { Date };

type ResponseUploadIceCoverFileIcePost = string;
export type { ResponseUploadIceCoverFileIcePost };

interface BodyUploadIceCoverFileIcePost {
	file: string;
}
export type { BodyUploadIceCoverFileIcePost };

interface GetIceCoverForecastDatesResponse {
	dates: string[];
}
export type { GetIceCoverForecastDatesResponse };

interface GetPlannerStateResponse {
	state: PlannerState;
}
export type { GetPlannerStateResponse };

const enum PlannerState {
	UNCONFIGURED = 'unconfigured',
	PLANNING = 'planning',
	PLANNED = 'planned',
}
export { PlannerState };

interface GetGraphResponse {
	graph: Graph;
}
export type { GetGraphResponse };

interface Graph {
	nodes: Node[];
	edges: Edge[];
}
export type { Graph };

interface Node {
	idx: number;
	lat: number;
	lon: number;
	name: string;
}
export type { Node };

interface Edge {
	start_node_idx: number;
	end_node_idx: number;
}
export type { Edge };

type ResponseUploadGraphFilePlannerGraphPost = string;
export type { ResponseUploadGraphFilePlannerGraphPost };

interface BodyUploadGraphFilePlannerGraphPost {
	file: string;
}
export type { BodyUploadGraphFilePlannerGraphPost };

interface GetRoutesResponse {
	routes: Route[];
}
export type { GetRoutesResponse };

interface Route {
	ship_name: string;
	start_node_idx: number;
	end_node_idx: number;
	start_time: string;
	route_points?: Point[];
	state?: RoutesItemState;
}
export type { Route };

interface Point {
	lat: number;
	lon: number;
}
export type { Point };

enum RoutesItemState {
	REQUESTED = 'requested',
	CALCULATED = 'calculated',
}
export type { RoutesItemState };

interface GetFleetResponse {
	fleet: Fleet;
}
export type { GetFleetResponse };

interface Fleet {
	transport_ships: Ship[];
	icebreakers: Ship[];
}
export type { Fleet };

interface Ship {
	name: string;
	ice_class: number;
	mw60: boolean;
	speed_no_ice: number;
	is_icebreaker?: boolean;
}
export type { Ship };

type ResponseUploadFleetFileFleetPost = string;
export type { ResponseUploadFleetFileFleetPost };

interface BodyUploadFleetFileFleetPost {
	file: string;
}
export type { BodyUploadFleetFileFleetPost };

interface GetShipResponse {
	ship: Ship;
}
export type { GetShipResponse };

type ReservedName = string;
export type { ReservedName };

type ResponseGetHealthHealthGet = { [name: string]: any };
export type { ResponseGetHealthHealthGet };
